def func(low, high, num):
    """
        前提是这个数在数组中必须存在
        例：索引，一本书 1000 页， 想找第 500 页的内容
    """
    # 计算出中位数
    middle = (low + high) // 2

    # 如果中位数小于查找值,则锁定后半段
    if num > arr[middle]:
        # 重置低位数
        low = middle + 1

    # 如果中位数大于查找值,则锁定前半段
    elif num < arr[middle]:
        # 重置高位值
        high = middle - 1

    else:
        # 找到该值并返回
        return '该值下标为:%s\t值为:%s' % (middle, arr[middle])

    return func(low, high, num)


def func2(arr, num):
    """
        一个排列好的数组，给一个数，判断该数是否存在于数组中
    """
    left = 0
    right = len(arr)

    while left < right:
        mid = (left + right) // 2
        if arr[mid] < num:
            left = mid
        elif arr[mid] > num:
            right = mid
        elif arr[mid] == num:
            return True
    else:
        return False


if __name__ == '__main__':
    arr = [1, 3, 5, 6, 7, 8, 13, 14, 15, 17, 18, 24, 30, 43, 56]
    low = 0
    high = len(arr)
    print(func(low, high, 13))
    print(func2(arr, 13))
